package visiopuce.ui.view;

import java.util.ArrayList;
import java.util.Date;

import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.nebula.widgets.formattedtext.DateFormatter;
import org.eclipse.nebula.widgets.formattedtext.FormattedText;
import org.eclipse.nebula.widgets.formattedtext.MaskFormatter;
import org.eclipse.nebula.widgets.formattedtext.NumberFormatter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.PlatformUI;
import org.eclipse.wb.swt.ResourceManager;

import visiopuce.ApplicationContexte;
import visiopuce.objets.Personne;
import visiopuce.objets.PersonnePhenotype;
import visiopuce.objets.Phenotype;
import visiopuce.objets.Prelevement;
import visiopuce.service.DroitServiceImpl;
import visiopuce.service.PersonneServiceImpl;
import visiopuce.service.PrelevementServiceImpl;
import visiopuce.service.ReferentielServiceImpl;
import visiopuce.ui.MemePersonneDialog;

public class DossierTabItem implements IDossierTabItem<Personne> {

	/** Ensemble des champs modifiables */

	private FormattedText tIPP;
	private Text tNom;
	private Text tPrenom;
	private FormattedText dNaissance;
	private Button btnRadioSexeF;
	private Button btnRadioSexeM;
	private Button btnRadioSexeNA;
	private Button btnRadioSexeI;
	private Button btnRadioIMG;
	private Button btnRadioMFIU;
	private Button btnRadioFC;
	private Button btnRadioPasFoetus;
	private Button[] btnCheckPhentoypes;
	private Text tAutrePheno;
	private Button btnAjouterUnPrelevement;

	private Font boldFont = JFaceResources.getFontRegistry().getBold(JFaceResources.DEFAULT_FONT);
	private Personne personne;
	private boolean isModifiable;
	private TabItem dossierTabItem;
	private Composite composite_2;
	private List listPrelevement;
	private ModifyListener modifyListener;
	private SelectionAdapter selectionListener;
	private ToolItem itemAddPrelevement;
	private ScrolledComposite sc1;

	public DossierTabItem(TabFolder parent, int style, boolean modifiable) {
		dossierTabItem = new TabItem(parent, style);
		modifyListener = new ModifyListener() {
			public void modifyText(ModifyEvent e) {
				if (((DossierEditor) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor()) != null) {
					((DossierEditor) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor()).setDirty(true);
				}
			}
		};
		selectionListener = new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
				((DossierEditor) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor()).setDirty(true);
			}
		};

		this.isModifiable = modifiable;
		createContent();

	}

	public TabItem getTabItem() {
		return dossierTabItem;
	}

	public void createContent() {

		/**
		 * Le dossier
		 */
		sc1 = new ScrolledComposite(dossierTabItem.getParent(), SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
		composite_2 = new Composite(sc1, SWT.NONE);
		sc1.setContent(composite_2);
		sc1.getVerticalBar().setIncrement(10);
		sc1.getHorizontalBar().setIncrement(10);
		sc1.setAlwaysShowScrollBars(true);
		dossierTabItem.setControl(sc1);
		composite_2.setLayout(new GridLayout(1, false));

		ToolBar toolBar = new ToolBar(composite_2, SWT.FLAT | SWT.RIGHT);
		toolBar.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
		itemAddPrelevement = new ToolItem(toolBar, SWT.PUSH);
		itemAddPrelevement.setImage(ResourceManager.getPluginImage("visiopuce", "icons/prelevement_plus.png"));
		itemAddPrelevement.setToolTipText("Ajouter un prélèvement");
		itemAddPrelevement.setEnabled(false);

		itemAddPrelevement.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
				if (!((DossierEditor) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor()).isModifiable()) {
					((DossierEditor) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor()).getItemModifier().notifyListeners(SWT.Selection, null);
				}
				if (((DossierEditor) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor()).isModifiable()) {
					Prelevement newPrelevement = new Prelevement();
					newPrelevement.setIdPrelevement(0);
					newPrelevement.setPersonne(getPersonne());
					((DossierEditor) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor()).addPrelevementTabItem(newPrelevement);
				}
			}
		});

		/**
		 * le groupe de l'identité
		 */
		Group groupIdentite = new Group(composite_2, SWT.NONE);
		groupIdentite.setText("Identit\u00E9");
		groupIdentite.setLayout(new GridLayout(4, false));

		// lblIdentifiant = new Label(groupIdentite, SWT.WRAP);
		// lblIdentifiant.setText("Identifiant du dossier  :");
		// lblIdentifiant.setFont(boldFont);
		// new Label(groupIdentite, SWT.NONE);
		//
		// Label lblGroupe = new Label(groupIdentite, SWT.NONE);
		// lblGroupe.setFont(SWTResourceManager.getFont("Segoe UI", 9,
		// SWT.BOLD));
		// lblGroupe.setText("Groupe : ");
		// new Label(groupIdentite, SWT.NONE);

		Label lblNom = new Label(groupIdentite, SWT.WRAP);
		lblNom.setText("Nom* :");
		lblNom.setFont(boldFont);

		tNom = new Text(groupIdentite, SWT.BORDER);
		GridData gridData_tNom = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
		gridData_tNom.widthHint = 120;
		tNom.setLayoutData(gridData_tNom);

		Label lblPrenom = new Label(groupIdentite, SWT.NONE);
		lblPrenom.setFont(boldFont);
		lblPrenom.setText("Pr\u00E9nom* : ");

		tPrenom = new Text(groupIdentite, SWT.BORDER);
		GridData gridData_tPrenom = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
		gridData_tPrenom.widthHint = 120;
		tPrenom.setLayoutData(gridData_tPrenom);

		Label lblDateDeNaissance = new Label(groupIdentite, SWT.NONE);
		lblDateDeNaissance.setFont(boldFont);
		lblDateDeNaissance.setText("Date de naissance* :");

		dNaissance = new FormattedText(groupIdentite, SWT.BORDER);
		dNaissance.setFormatter(new DateFormatter("dd/MM/yyyy"));
		GridData gridData_dNaissance = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
		gridData_dNaissance.widthHint = 75;
		dNaissance.getControl().setLayoutData(gridData_dNaissance);

		Label lblIpp = new Label(groupIdentite, SWT.NONE);
		lblIpp.setFont(boldFont);
		lblIpp.setText("IPP :");

		tIPP = new FormattedText(groupIdentite, SWT.BORDER);
		tIPP.setFormatter(new MaskFormatter("##########"));
		GridData gridData_tIPP = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
		gridData_tIPP.widthHint = 75;
		tIPP.getControl().setLayoutData(gridData_tIPP);

		Group group1 = new Group(groupIdentite, SWT.SHADOW_IN);
		group1.setText("Sexe* :");
		group1.setLayout(new RowLayout(SWT.VERTICAL));

		btnRadioSexeF = new Button(group1, SWT.RADIO);
		btnRadioSexeF.setText("F");
		btnRadioSexeM = new Button(group1, SWT.RADIO);
		btnRadioSexeM.setText("M");
		btnRadioSexeNA = new Button(group1, SWT.RADIO);
		btnRadioSexeNA.setText("non connu");
		btnRadioSexeNA.setToolTipText("Le sexe n'est pas préciser dans le dossier");

		btnRadioSexeI = new Button(group1, SWT.RADIO);
		btnRadioSexeI.setText("Indeterminé");
		btnRadioSexeI.setToolTipText("Il n'est pas possible de déterminer si c'est un garçon ou une fille");

		Group group2 = new Group(groupIdentite, SWT.SHADOW_IN);
		group2.setText("Type* :");
		group2.setLayout(new RowLayout(SWT.VERTICAL));

		btnRadioPasFoetus = new Button(group2, SWT.RADIO);
		btnRadioPasFoetus.setText("postnatal ou prénatal sans IMG/MFIU/FC");
		btnRadioPasFoetus.setSelection(true);

		btnRadioIMG = new Button(group2, SWT.RADIO);
		btnRadioIMG.setText("IMG");

		btnRadioMFIU = new Button(group2, SWT.RADIO);
		btnRadioMFIU.setText("MFIU");

		btnRadioFC = new Button(group2, SWT.RADIO);
		btnRadioFC.setText("FC");

		/** groupe de la clinique */
		Group groupclinique = new Group(composite_2, SWT.NONE);
		groupclinique.setText("Donn\u00E9es cliniques");
		groupclinique.setLayout(new GridLayout(2, false));

		ArrayList<Phenotype> phenotypes = ReferentielServiceImpl.getInstance().getPhentype(null);
		int i = 0;
		String classePheno = "";
		btnCheckPhentoypes = new Button[phenotypes.size()];
		int col = 0;
		Group g = null;
		if (phenotypes != null) {
			for (Phenotype phenotype : phenotypes) {
				if (!classePheno.equals(phenotype.getClassePhenotype().getLibelle())) {
					if (col == 0 || col == 2) {
						g = new Group(groupclinique, SWT.NONE);
						g.setLayout(new GridLayout(1, false));
						g.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
						col++;
					}
					Label titrePheno = new Label(g, SWT.NONE);
					titrePheno.setFont(boldFont);
					titrePheno.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
					titrePheno.setText(phenotype.getClassePhenotype().getLibelle());
					classePheno = phenotype.getClassePhenotype().getLibelle();
					if (classePheno.equals("Prénatal")) {
						col = 2;
					}
				}
				Button buttonPheno = new Button(g, SWT.CHECK);
				buttonPheno.setText(phenotype.getLibelle());

				btnCheckPhentoypes[i] = buttonPheno;
				i++;
			}
		}

		Label lblPrecision = new Label(groupclinique, SWT.NONE);
		lblPrecision.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));
		lblPrecision.setFont(boldFont);
		lblPrecision.setText("Précisions :");

		tAutrePheno = new Text(groupclinique, SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL);

		GridData gd = new GridData(GridData.FILL, SWT.CENTER, true, true, 2, 3);
		gd.heightHint = 100;
		gd.widthHint = 200;
		tAutrePheno.setLayoutData(gd);

		setModifiable(isModifiable);
		dossierTabItem.getParent().setSelection(dossierTabItem);

	}

	public boolean isModifiable() {
		return isModifiable;
	}

	public void setModifiable(boolean isModifiable) {
		removeDirtyListener();
		this.isModifiable = isModifiable;
		if (!isModifiable) {

			tIPP.getControl().setEditable(false);
			tNom.setEditable(false);
			tPrenom.setEditable(false);
			tAutrePheno.setEditable(false);
			dNaissance.getControl().setEditable(false);
			btnRadioSexeF.setEnabled(false);
			btnRadioSexeM.setEnabled(false);
			btnRadioSexeNA.setEnabled(false);
			btnRadioSexeI.setEnabled(false);
			btnRadioIMG.setEnabled(false);
			btnRadioMFIU.setEnabled(false);
			btnRadioFC.setEnabled(false);
			btnRadioPasFoetus.setEnabled(false);
			for (Button btnCheckPhentoype : btnCheckPhentoypes) {
				btnCheckPhentoype.setEnabled(false);
			}
		} else {

			tIPP.getControl().setEditable(DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "tIPP"));
			tNom.setEditable(DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "tNom"));
			tPrenom.setEditable(DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "tPrenom"));
			tAutrePheno.setEditable(DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "tAutrePheno"));
			dNaissance.getControl().setEditable(DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "dNaissance"));
			boolean modifieSexe = DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "btnRadioSexe");
			btnRadioSexeF.setEnabled(modifieSexe);
			btnRadioSexeM.setEnabled(modifieSexe);
			btnRadioSexeNA.setEnabled(modifieSexe);
			btnRadioSexeI.setEnabled(modifieSexe);
			boolean modifieFoetus = DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "btnRadioFoetus");
			btnRadioIMG.setEnabled(modifieFoetus);
			btnRadioMFIU.setEnabled(modifieFoetus);
			btnRadioFC.setEnabled(modifieFoetus);
			btnRadioPasFoetus.setEnabled(modifieFoetus);
			boolean modifiePhenotype = DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "btnCheckPhenotype");
			for (Button btnCheckPhentoype : btnCheckPhentoypes) {
				btnCheckPhentoype.setEnabled(modifiePhenotype);
			}
			addDirtyListener();
		}
		if (btnAjouterUnPrelevement != null) {
			btnAjouterUnPrelevement.setEnabled(DroitServiceImpl.getInstance().peutCreerByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "prelevement"));
			itemAddPrelevement.setEnabled(DroitServiceImpl.getInstance().peutCreerByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "prelevement"));
		}
	}

	private void addDirtyListener() {

		tIPP.getControl().addModifyListener(modifyListener);
		tNom.addModifyListener(modifyListener);
		tPrenom.addModifyListener(modifyListener);
		tAutrePheno.addModifyListener(modifyListener);

		dNaissance.getControl().addSelectionListener(selectionListener);
		btnRadioSexeF.addSelectionListener(selectionListener);
		btnRadioSexeM.addSelectionListener(selectionListener);
		btnRadioSexeNA.addSelectionListener(selectionListener);
		btnRadioSexeI.addSelectionListener(selectionListener);
		btnRadioIMG.addSelectionListener(selectionListener);
		btnRadioMFIU.addSelectionListener(selectionListener);
		btnRadioFC.addSelectionListener(selectionListener);
		btnRadioPasFoetus.addSelectionListener(selectionListener);
		for (Button btnCheckPhentoype : btnCheckPhentoypes) {
			btnCheckPhentoype.addSelectionListener(selectionListener);
		}
		if (btnAjouterUnPrelevement != null) {
			btnAjouterUnPrelevement.addSelectionListener(selectionListener);
			itemAddPrelevement.addSelectionListener(selectionListener);
		}
	}

	private void removeDirtyListener() {

		tIPP.getControl().removeModifyListener(modifyListener);
		tNom.removeModifyListener(modifyListener);
		tPrenom.removeModifyListener(modifyListener);
		tAutrePheno.removeModifyListener(modifyListener);

		dNaissance.getControl().removeSelectionListener(selectionListener);
		btnRadioSexeF.removeSelectionListener(selectionListener);
		btnRadioSexeM.removeSelectionListener(selectionListener);
		btnRadioSexeNA.removeSelectionListener(selectionListener);
		btnRadioSexeI.removeSelectionListener(selectionListener);
		btnRadioIMG.removeSelectionListener(selectionListener);
		btnRadioMFIU.removeSelectionListener(selectionListener);
		btnRadioFC.removeSelectionListener(selectionListener);
		btnRadioPasFoetus.removeSelectionListener(selectionListener);
		for (Button btnCheckPhentoype : btnCheckPhentoypes) {
			btnCheckPhentoype.removeSelectionListener(selectionListener);
		}
		if (btnAjouterUnPrelevement != null) {
			btnAjouterUnPrelevement.removeSelectionListener(selectionListener);
			itemAddPrelevement.removeSelectionListener(selectionListener);
		}
	}

	public Personne recupererObjet() {
		if (verifierChamp()) {

			// private Text tIPP;
			personne.setiPP(tIPP.getControl().getText().trim());

			personne.setNom(tNom.getText().trim().toUpperCase());
			personne.setPrenom(tPrenom.getText().trim().toUpperCase());
			personne.setDateNaissance((Date) dNaissance.getValue());

			if (btnRadioSexeF.getSelection()) {
				personne.setSexe("F");
			}
			if (btnRadioSexeM.getSelection()) {
				personne.setSexe("M");
			}
			if (btnRadioSexeNA.getSelection()) {
				personne.setSexe("NA");
			}
			if (btnRadioSexeI.getSelection()) {
				personne.setSexe("I");
			}

			if (btnRadioIMG.getSelection()) {
				personne.setType("IMG");
			}
			if (btnRadioMFIU.getSelection()) {
				personne.setType("MFIU");
			}
			if (btnRadioFC.getSelection()) {
				personne.setType("FC");
			}
			if (btnRadioPasFoetus.getSelection()) {
				personne.setType("NA");
			}
			personne.setPhenotype(tAutrePheno.getText().trim());
			ArrayList<PersonnePhenotype> personnePhenotypes = new ArrayList<PersonnePhenotype>();
			for (Button btnCheckPhentoype : btnCheckPhentoypes) {
				boolean isSelect = btnCheckPhentoype.getSelection();
				if (isSelect) {
					PersonnePhenotype pf = new PersonnePhenotype();
					pf.setPersonne(personne);
					pf.setPhenotype(ReferentielServiceImpl.getInstance().getPhentype(btnCheckPhentoype.getText()).get(0));
					personnePhenotypes.add(pf);
				}
			}
			personne.setPhenotypes(personnePhenotypes);
			// private Button btnCheckButtonFoetus;
			// private Text textTerme;
			// private Text textAgeMat;
			// private Text textNuque;
			// private Text textSigneAppel;
			// private Text textCombine;
			// private Text textMqSerique;
			// private Text textSequentielIntegre;

		} else {
			return null;
		}
		return personne;
	}

	public boolean verifierChamp() {
		if (!btnRadioSexeNA.getSelection() && !btnRadioSexeF.getSelection() && !btnRadioSexeM.getSelection() && !btnRadioSexeI.getSelection() && DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "btnRadioSexe")) {
			MessageDialog.openError(Display.getCurrent().getActiveShell(), "Champs obligatoire manquant", "Onglet identité : Champs obligatoire manquant : Sexe manquant");
			return false;
		}
		if (!btnRadioIMG.getSelection() && !btnRadioFC.getSelection() && !btnRadioMFIU.getSelection() && !btnRadioPasFoetus.getSelection() && DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "btnRadioFoetus")) {
			MessageDialog.openError(Display.getCurrent().getActiveShell(), "Champs obligatoire manquant", "Onglet identité : Champs obligatoire manquant : Type manquant");
			return false;
		}
		if (tNom.getText().isEmpty() && DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "tNom")) {
			MessageDialog.openError(Display.getCurrent().getActiveShell(), "Champs obligatoire manquant", "Onglet identité : Champs obligatoire manquant : Nom manquant");
			return false;
		}
		if (tPrenom.getText().isEmpty() && DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "tPrenom")) {
			MessageDialog.openError(Display.getCurrent().getActiveShell(), "Champs obligatoire manquant", "Onglet identité : Champs obligatoire manquant : Prenom manquant");
			return false;
		}
		// verif IPP
		String numIPP = tIPP.getControl().getText();
		if (numIPP != null && !numIPP.isEmpty()) {
			if (numIPP.length() != 10) {
				MessageDialog.openError(Display.getCurrent().getActiveShell(), "Erreur de format", "Onglet identité : Erreur de format : l'IPP doit être composé de 10 chiffres");
				return false;
			} else {
				Personne personneIPP = PersonneServiceImpl.getInstance().ippUnique(numIPP, personne.getIdPersonne());
				if (personneIPP != null) {
					MessageDialog.openError(Display.getCurrent().getActiveShell(), "Erreur de formatt", "Onglet identité : Erreur de format : l'IPP existe déjà pour une autre personne : " + personneIPP.getNom() + " " + personneIPP.getPrenom());
					return false;
				}
			}
		}

		// verif nom/prenom
		if (personne.getIdPersonne() == 0) {
			ArrayList<Personne> personnesMemeNom = PersonneServiceImpl.getInstance().nomUnique(tNom.getText(), personne.getIdPersonne());
			if (personnesMemeNom != null && !personnesMemeNom.isEmpty()) {
				MemePersonneDialog memePersonneDialog = new MemePersonneDialog(this.getTabItem().getParent().getShell(), personnesMemeNom);
				if (memePersonneDialog.open() == IDialogConstants.CANCEL_ID) {
					return false;
				}
			}
		}
		// verif date naissance
		Date ddN = (Date) dNaissance.getValue();
		if (ddN == null) {
			MessageDialog.openError(Display.getCurrent().getActiveShell(), "Champs obligatoire manquant", "Onglet identité : Champs obligatoire manquant : Date de naissance");
			return false;
		}
		if (dNaissance.getValue() != null && DroitServiceImpl.getInstance().peutModifierByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "dNaissance")) {
			String message = ApplicationContexte.getInstance().valideDate((Date) dNaissance.getValue());
			if (!message.isEmpty()) {
				MessageDialog.openError(Display.getCurrent().getActiveShell(), "Erreur de format", "Onglet " + this.getTabItem().getText() + " : Erreur de format : Date de naissance : " + message);
				return false;
			}

		}
		return true;
	}

	public void remplir(Personne personne) {

		removeDirtyListener();
		this.personne = personne;

		tIPP.getControl().setText("");
		tNom.setText("");
		tPrenom.setText("");
		tAutrePheno.setText("");

		dNaissance.getControl().setText("");
		btnRadioSexeF.setSelection(false);
		btnRadioSexeM.setSelection(false);
		btnRadioSexeNA.setSelection(true);
		btnRadioSexeI.setSelection(false);
		btnRadioIMG.setSelection(false);
		btnRadioMFIU.setSelection(false);
		btnRadioFC.setSelection(false);
		btnRadioPasFoetus.setSelection(true);

		for (Button btnCheckPhentoype : btnCheckPhentoypes) {
			btnCheckPhentoype.setSelection(false);
		}

		dossierTabItem.setText("Identité");
		if (personne.getIdPersonne() != 0) {

			if (personne.getiPP() != null && !personne.getiPP().isEmpty()) {
				tIPP.getControl().setText("" + personne.getiPP());
			}
			if (personne.getNom() != null) {
				tNom.setText(personne.getNom());
			}
			if (personne.getPrenom() != null) {
				tPrenom.setText(personne.getPrenom());
			}
			if (personne.getPhenotype() != null) {
				tAutrePheno.setText(personne.getPhenotype());
			} else {
				tAutrePheno.setText("");
			}
			btnRadioSexeNA.setSelection(personne.getSexe().equals("NA"));
			btnRadioSexeF.setSelection(personne.getSexe().equals("F"));
			btnRadioSexeM.setSelection(personne.getSexe().equals("M"));
			btnRadioSexeI.setSelection(personne.getSexe().equals("I"));

			// btnCheckButtonFoetus.setSelection(selected);
			if (personne.getDateNaissance() != null) {
				// Calendar calendar = Calendar.getInstance();
				// calendar.setTime(personne.getDateNaissance());
				dNaissance.setValue(personne.getDateNaissance());// calendar.get(Calendar.YEAR),
																	// calendar.get(Calendar.MONTH)
																	// - 1,
																	// calendar.get(Calendar.DAY_OF_MONTH));
			}

			btnRadioPasFoetus.setSelection(personne.getType().equals("NA"));
			btnRadioFC.setSelection(personne.getType().equals("FC"));
			btnRadioIMG.setSelection(personne.getType().equals("IMG"));
			btnRadioMFIU.setSelection(personne.getType().equals("MFIU"));

			createListePrelevements(personne);

			ArrayList<Phenotype> phentoypes = PersonneServiceImpl.getInstance().getPhenotypesByIdPersonne(personne.getIdPersonne());
			for (Button btnCheckPhentoype : btnCheckPhentoypes) {
				for (Phenotype phentoype : phentoypes) {

					if (btnCheckPhentoype.getText().equals(phentoype.getLibelle())) {
						btnCheckPhentoype.setSelection(true);
					}
				}

			}

		}
		// données par défaut à la création d'un dossier
		else {
			btnRadioSexeNA.setSelection(true);
			btnRadioPasFoetus.setSelection(true);

		}
		composite_2.pack();
		sc1.redraw();
		addDirtyListener();
	}

	private void createListePrelevements(Personne personne) {
		/* liste des prélèvements */
		if (listPrelevement == null) {

			Group gpListePrel = new Group(composite_2, SWT.NONE);
			gpListePrel.setLayout(new GridLayout(2, false));
			gpListePrel.setText("Prélèvements du dossier");

			listPrelevement = new List(gpListePrel, SWT.BORDER);
			listPrelevement.setToolTipText("Liste des prélèvements du dossier");
			java.util.List<Prelevement> prelevements = PrelevementServiceImpl.getInstance().findAllByidPersonne(personne.getIdPersonne());
			for (Prelevement prelevement : prelevements) {
				String titre = prelevement.getNumeroPrelevement() + "(" + prelevement.getSecteur().getLibelle();
				if (prelevement.getTypePrelevement() != null) {
					titre += " - " + prelevement.getTypePrelevement().getLibelle() + ")";
				}
				listPrelevement.add(titre);
			}
			listPrelevement.pack();
			if (DroitServiceImpl.getInstance().peutLireByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "prelevement")) {

				listPrelevement.addMouseListener(new MouseListener() {

					public void mouseUp(MouseEvent e) {
					}

					public void mouseDown(MouseEvent e) {
					}

					public void mouseDoubleClick(MouseEvent e) {
						String[] titres = listPrelevement.getSelection();
						String numeroPrel = titres[0].substring(0, titres[0].indexOf("("));
						Prelevement p = PrelevementServiceImpl.getInstance().getPrelevementByNumero(numeroPrel);
						if (p != null) {
							IEditorPart editeurActif = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
							if (editeurActif instanceof DossierEditor) {
								DossierEditor editeur = (DossierEditor) editeurActif;
								if (editeur.getPrelevementTabItems().containsKey(p.getIdPrelevement())) {
									editeur.getTabFolder().setSelection(editeur.getPrelevementTabItems().get(p.getIdPrelevement()).getTabItem());
								} else {
									editeur.addPrelevementTabItem(p);

								}
							}
						}
					}
				});
			}

			btnAjouterUnPrelevement = new Button(gpListePrel, SWT.NONE);
			btnAjouterUnPrelevement.setImage(ResourceManager.getPluginImage("visiopuce", "icons/prelevement_plus.png"));
			btnAjouterUnPrelevement.setToolTipText("Ajouter un prélèvement");
			btnAjouterUnPrelevement.addSelectionListener(new SelectionAdapter() {
				public void widgetSelected(SelectionEvent e) {
					if (!((DossierEditor) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor()).isModifiable()) {
						((DossierEditor) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor()).getItemModifier().notifyListeners(SWT.Selection, null);
					}
					if (((DossierEditor) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor()).isModifiable()) {
						Prelevement newPrelevement = new Prelevement();
						newPrelevement.setIdPrelevement(0);
						newPrelevement.setPersonne(getPersonne());
						((DossierEditor) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor()).addPrelevementTabItem(newPrelevement);
					}
				}
			});
			if (btnAjouterUnPrelevement != null) {
				btnAjouterUnPrelevement.setEnabled(DroitServiceImpl.getInstance().peutCreerByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "prelevement"));
				itemAddPrelevement.setEnabled(DroitServiceImpl.getInstance().peutCreerByUtilisateurAndChamp(ApplicationContexte.getInstance().getUtilisateur(), "prelevement"));
			}
		} else {
			listPrelevement.removeAll();
			java.util.List<Prelevement> prelevements = PrelevementServiceImpl.getInstance().findAllByidPersonne(personne.getIdPersonne());
			for (Prelevement prelevement : prelevements) {
				if (prelevement.getTypePrelevement() != null) {
					listPrelevement.add(prelevement.getNumeroPrelevement() + "(" + prelevement.getSecteur().getLibelle() + " - " + prelevement.getTypePrelevement().getLibelle() + ")");
				} else {
					listPrelevement.add(prelevement.getNumeroPrelevement() + "(" + prelevement.getSecteur().getLibelle() + ")");
				}

			}
			listPrelevement.pack();
		}
		// Button btnSupprUnPrlvement = new Button(composite_2, SWT.NONE);
		// btnSupprUnPrlvement.setText("Supprimer le pr\u00E9l\u00E8vement sélectionné");
		// btnSupprUnPrlvement.addSelectionListener(new SelectionAdapter() {
		// public void widgetSelected(SelectionEvent e) {
		// });
	}

	protected Personne getPersonne() {
		return personne;
	}
}
